/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package intervalMath;
import java.math.*;
/**
 *
 * @author Konstantin Kolotyuk
 */
public interface IntervalArithmetic extends Cloneable {

    IntervalArithmetic add(IntervalArithmetic a);
    IntervalArithmetic add(IntervalArithmetic a, int scale);
    IntervalArithmetic mult(IntervalArithmetic a);
    IntervalArithmetic mult(IntervalArithmetic a, int scale);
    IntervalArithmetic sub(IntervalArithmetic a);
    IntervalArithmetic sub(IntervalArithmetic a, int scale);
    IntervalArithmetic div(IntervalArithmetic a, int scale);
    IntervalArithmetic inf(IntervalArithmetic a);
    IntervalArithmetic sup(IntervalArithmetic a);
    IntervalArithmetic multDouble(double m);
    IntervalArithmetic multDouble(double m, int scale);
    BigDecimal getLeftLimit ();
    BigDecimal getRightLimit ();
    int getScale();
    RoundingMode getImproperLeftRoundingMode();
    RoundingMode getImproperRightRoundingMode();
    RoundingMode getProperLeftRoundingMode();
    RoundingMode getProperRightRoundingMode();
    boolean isProper();
    boolean isContainedIn(IntervalArithmetic b);    
    void setLimits(BigDecimal left, BigDecimal right);
    void setLimits(BigDecimal left, BigDecimal right, int scale);
    public Object clone();


}
